package com.webserver.core;

import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
import java.util.*;

/**
 * 该线程任务负责与指定客户端完成HTTP交互。
 * ClientHandler与客户端交流的流程分成三步
 * 1:解析请求
 * 2:处理请求
 * 3:发送相应
 */
public class ClientHandler implements Runnable{
    private Socket socket;

    public ClientHandler() {
    }

    public ClientHandler(Socket socket) {
        this.socket = socket;
    }

    public void run(){
        try {
            //获取客户端发过来的消息。
            InputStream in = socket.getInputStream();
            char pre = 'a',cur;
            StringBuilder builder = new StringBuilder();
            int d;
            while ((d = in.read())!=-1){
                cur = (char)d;
                if (pre==13&&cur==10){
                    break;
                }
                builder.append(cur);
                pre = cur;
            }

            String line = builder.toString().trim();
            System.out.println(line);




            //请求行相关信息
            String method = line.substring(0,line.indexOf(" "));//请求方式
            String uri = line.substring(line.indexOf(" ")+1,line.lastIndexOf(" "));//抽象路径
            String protocol = line.substring(line.lastIndexOf(' ')+1);//协议版本
//            String[] array = line.split("\\s");
//            method = array[0];   //获取split拆分空格前的字符串。
//            uri = array[1];      //获取split拆分字符串的第二段。
//            protocol = array[2]; //获取split拆分字符串的第三段。
            System.out.println("method: "+method);
            System.out.println("uri: "+uri);
            System.out.println("protocol: "+protocol);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
